const gulp = require('gulp')

const cssmin = require('gulp-cssmin')
const autoprefixer = require('gulp-autoprefixer')

const htmlmin = require('gulp-htmlmin')

const uglify = require('gulp-uglify')
const babel = require('gulp-babel')


const cssHandler = () => {
    // 1-2. 找到源文件
    // 你要打包的是 ./src/js 文件夹里面的内容吗 ?
    // 你要打包的是 ./src/images 文件夹里面的内容吗 ?
    return gulp
      .src('./src/css/*.css') // 找到文件
      .pipe(autoprefixer()) // 自动添加前缀
      .pipe(cssmin()) // 打包
      .pipe(gulp.dest('./dist/css/')) // 放到指定目录内
  }

  const jsHandler = () => {
    // 2-2. 找到指定的 js 文件
    return gulp
      .src('./src/js/*.js') // 找到指定的 js 文件
      .pipe(babel({ presets: ['@babel/preset-env'] })) // 进行 es6 转换 es5
      .pipe(uglify()) // 对 js 代码进行压缩
      .pipe(gulp.dest('./dist/js/')) // 放到指定目录内
  }

  const htmlHandler = () => {
    return gulp
      .src('./src/views/*.html')
      .pipe(htmlmin({
        // 去掉所有的空格空白内容
        collapseWhitespace: true,
        // 去掉布尔类型属性
        collapseBooleanAttributes: true,
        // 移出属性值位置的双引号
        removeAttributeQuotes: true,
        // 移出注释内容
        removeComments: true,
        // 移出空属性
        removeEmptyAttributes: true,
        // 移出 script 标签上的默认 type 属性
        removeScriptTypeAttributes: true,
        // 移出 style 标签和 link 标签的 默认 type 属性
        removeStyleLinkTypeAttributes: true,
      })) // 进行压缩
      .pipe(gulp.dest('./dist/views/')) // 放到指定目录
  }

  const dataHandler = () => {
    return gulp
      .src('./src/data/*.**')
      .pipe(gulp.dest('./dist/data/'))
  }

  const fontsHandler = () => {
    return gulp
      .src('./src/fonts/*.**')
      .pipe(gulp.dest('./dist/fonts/'))
  }

  const imgHandler = () => {
    // 5-2. 找到指定内容
    return gulp
      .src('./src/images/*.**')
      .pipe(gulp.dest('./dist/images/'))
  }

  const res = gulp.parallel(cssHandler, jsHandler, htmlHandler, imgHandler, dataHandler)


  module.exports = {
    cssHandler: cssHandler,
    jsHandler: jsHandler,
    htmlHandler: htmlHandler,
    imgHandler: imgHandler,
    dataHandler: dataHandler,
    fontsHandler:fontsHandler
  }